// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
// #include "windows.h"

// typedef int DataType;

// typedef struct TreeNode
// {
//   DataType value;
//   struct TreeNode *left;
//   struct TreeNode *right;
// } TreeNode;

// // 创建树的新节点
// TreeNode *CreateNode(DataType value)
// {
//   TreeNode *newNode = (TreeNode *)malloc(sizeof(TreeNode));
//   if (newNode == NULL)
//   {
//     perror("Memory allocation failed");
//     exit(EXIT_FAILURE);
//   }
//   newNode->value = value;
//   newNode->left = newNode->right = NULL;
//   return newNode;
// }

// // 插入节点（二叉搜索树规则）
// TreeNode *InsertNode(TreeNode *root, DataType x)
// {
//   if (root == NULL)
//   {
//     return CreateNode(x);
//   }
//   if (x < root->value)
//   {
//     root->left = InsertNode(root->left, x);
//   }
//   else
//   {
//     root->right = InsertNode(root->right, x);
//   }
//   return root;
// }

// // 释放内存
// void FreeTree(TreeNode *root)
// {
//   if (root)
//   {
//     FreeTree(root->left);
//     FreeTree(root->right);
//     free(root);
//   }
// }

// // 所有叶子权值之和
// int AllYeZiWeight(TreeNode *root, int depth)
// {
//   if (root == NULL)
//   {
//     return 0;
//   }
//   int wplL, wplR;
//   if (root->left == NULL && root->right == NULL)
//   {
//     return root->value * depth;
//   }
//   wplL = AllYeZiWeight(root->left, depth + 1);
//   wplR = AllYeZiWeight(root->right, depth + 1);

//   return wplL + wplR;
// }

// int main()
// {
//   SetConsoleOutputCP(CP_UTF8);
//   TreeNode *root1 = NULL;
//   int values1[] = {50, 30, 70, 20, 40, 60, 80};
//   int length1 = sizeof(values1) / sizeof(values1[0]);

//   // 构建二叉搜索树
//   for (int i = 0; i < length1; i++)
//   {
//     root1 = InsertNode(root1, values1[i]);
//   }

//   int weight = AllYeZiWeight(root1, 0);
//   printf("所有叶子的权值之和为:%d\n", weight);

//   FreeTree(root1);
//   return 0;
// }